/**
 * 一个页面应用，即一个完整的CURD操作页面引用一次
 * 内部操作建议打开对话框完成
 */
var curd = {
    //当前页面的数据列表
    dataGrid:null,
    treeGrid:null,
    //当前的操作窗口（对话框）
    dlg : null,
    //布局工具
    layout : window.top.layout,
    //当前应用的接口
    api:'',
    //添加页面地址
    addUrl:'',
    //添加页面地址
    editUrl:'',
    //导出数据地址
    exportUrl:''
};

/**
 * 添加操作
 * @param string url 页面URL
 * @param string title 标题
 * @param string size 页面大小，small=600X400,其它为80%X600
 */
curd.add = function (title, size) {
    curd.dialog(curd.addUrl, title, size);
}

/**
 * 编辑操作
 * @param int id 要编辑对象的主键
 * @param string title 标题
 * @param string size 页面大小，small=400X400,其它为80%X600
 */
curd.edit = function (id, title, size) {
    curd.dialog(curd.editUrl + id, title, size);
}

/**
 * 通过对话框打开操作页面，并进行操作
 * @param string url 页面
 * @param string title 标题
 * @param string size 页面大小，small=600X400,其它为80%X600
 */
curd.dialog = function (url, title, size) {
    curd.closeDialog();
    var options = {
        title : title,
        url : url,
        width: size == 'small' ? 600 : '80%',
        height:  size == 'small' ? 400 : 500,
        buttons:[{
            text:'确认',
            iconCls:'icon-ok',
            handler:function(){
                var dw = curd.dlg.find('iframe').get(0).contentWindow;
                if($.isFunction(dw.submitForm)) {
                    dw.submitForm(curd);
                } else {
                    var $form = dw.$('#pageForm');
                    //表单验证
                    if(!$form.form('validate')) return;

                    curd.ajax(curd.api + 'update', 'post', serializeObject($form));
                }
            }
        },{
            text:'取消',
            iconCls:'icon-remove',
            handler:function(){
                curd.closeDialog();
            }
        }],
        onClose:function(){
            curd.dlg = null;
        }
    }
    curd.dlg = curd.layout.openModel(options);
}

/**
 * 批量操作
 * @param string type 操作类型：delete,disable,enable,verify
 * @param confirm
 */
curd.batch = function (type,confirm) {
    var data = {
        id : curd.getSelectIds()
    };
    if(typeof confirm == 'undefined') curd.ajax(curd.api +type, 'get', data);
    else $.messager.confirm('操作确认',confirm,function(r){
        if (r){
            curd.ajax(curd.api +type, 'get', data);
        }
    });
}

/**
 * 发起一次AJAX请求，并可要求用户确认
 * @param string method API操作
 * @param object data 参数,如果有参数，发起POST请求，没有参数即为GET
 * @param confirm 确认信息
 */
curd.ajaxDo = function (method, data, confirm) {
    var type = data ? 'post' : 'get';
    if(typeof confirm == 'undefined') curd.ajax(curd.api + method, type, data);
    else $.messager.confirm('操作确认',confirm,function(r){
        if (r){
            curd.ajax(curd.api + method,type, data);
        }
    });
}

/**
 * 当前选中所有的行
 * @returns {*|{js, css, dependencies}}
 */
curd.getSelection = function()
{
    return curd.dataGrid ? curd.dataGrid.datagrid('getSelections') : curd.treeGrid.treegrid('getSelections');
}

/**
 * 当前选中的行的字段集（一般为ID）
 * @param string idField
 * @returns {string}
 */
curd.getSelectIds = function (idField) {
    if(!idField) idField = 'id';
    var rows = curd.getSelection();
    var ids = [];
    $.each(rows, function () {
        ids.push(this[idField]);
    });
    return ids.join(',');
}


/**
 * 发起AJAX请求
 * @param string api 接口地址
 * @param string type 请求类型:post get put delete
 * @param object data 数据
 */
curd.ajax = function (api, type, data) {
    $.ajax({
        url : app.api + api,
        type : type,
        data:data,
        dataType : 'json',
        success: function(res){
            curd.ajaxCallback(res);
        },
        error:function(res){
            curd.layout.message(res.message, '请求错误!');
        }
    });
}

/**
 * 默认的AJAX操作回调
 * @param res
 */
curd.ajaxCallback = function (res) {
    if(res.error == 0){
        if(res.url){
            curd.layout.openTab(res.url, res.message);
        }else{
            curd.layout.message(res.message, '操作成功!');
            curd.closeDialog();
            curd.reload();
        }
    }else{
        curd.layout.message(res.message, '操作失败!');
    }
}

/**
 * 关闭当前对话框
 */
curd.closeDialog = function () {
    if(curd.dlg){
        curd.dlg.dialog('close');
        curd.dlg = null;
    }
}

/**
 * 清楚选中状态
 */
curd.clean = function () {
    if(curd.dataGrid){
        curd.dataGrid.datagrid('clearChecked');//清除所有勾选的行
        curd.dataGrid.datagrid('clearSelections');//清除所有已经选择的
    }
    if(curd.treeGrid){
        curd.treeGrid.treegrid('clearChecked');//清除所有勾选的行
        curd.treeGrid.treegrid('clearSelections');//清除所有已经选择的
    }
}

/**
 * 重新加载数据
 */
curd.reload = function () {
    if(curd.treeGrid) curd.treeGrid.treegrid('reload');
    if(curd.dataGrid) curd.dataGrid.datagrid('reload');
}

/**
 * 搜索
 */
curd.search = function () {
    if(curd.dataGrid) curd.dataGrid.datagrid('load', serializeObject($('#searchForm')));
    if(curd.treeGrid) curd.treeGrid.treegrid('load', serializeObject($('#searchForm')));
}

/**
 * 导出
 */
curd.exports = function () {
    window.open(curd.exportUrl + '?'+ $('#searchForm').serialize());
}

/**
 * 格式化状态
 * @param value
 * @param row
 * @param index
 * @returns {string}
 */
function format_url(value, row, index) {
    return '<a href="'+value+'" target="_blank">'+value+"</a>";
}


/**
 * 格式化操作按钮
 * @param int id 要操作的对象主键数据
 * @param array btns 按钮数组
 * @returns {string}
 */
function format_button(id, btns) {
    if(!btns || btns.length < 1) return '无';
    var str = '';
    for(var i=0;i<btns.length;i++){
        switch (btns[i]){
            case 'edit':
                str += '<a href="javascript:void(0);" onclick="curd.edit('+id+',\'编辑\')"><i class="icon-pencil"></i>编辑</a>';
                break;
            case 'delete':
                str += '<a href="javascript:void(0);" onclick="curd.ajaxDo(\'delete/id/'+id+'\',null,\'您确定要删除该数据吗？\')"><i class="icon-remove"></i>删除</a>';
                break;
            default:
                break;
        }
    }
    return str;
}